#ifndef __DAEMON_HPP__
#define __DAEMON_HPP__
//使用该文件后进程会变为守护进程，该进程的打印内容就找不到了


#include <iostream>
#include <signal.h>
#include <fcntl.h>
#include <unistd.h>

void Daemon()
{
    signal(SIGCHLD, SIG_IGN);
    signal(SIGPIPE, SIG_IGN);

    if(fork() > 0)
        exit(0);//父进程直接退出，也就是组长退出，让正在执行的进程不再是组长，这样我们就可以使用setsid了
    
    //从现在开始就只有子进程在执行了

    chdir("/");//更改守护进程的工作目录，建议为根目录

    setsid();//将自己设置为新的对话


    //下面将标准输入，标准输出，标准错误重定向到dev/null，这个文件相当于一个垃圾桶，你向该文件写入不会出问题，
    //但是你却读不出来任何东西，比你关掉这三个文件描述符，一写入就报错要好很多
    int fd = open("dev/null", O_RDWR);
    if(fd >= 0)
    {
        dup2(fd, 0);
        dup2(fd, 1);
        dup2(fd, 2);
    }
}



#endif
